package de.fh.dortmund.pk1.aufgabe1.cluedo;

import java.util.Arrays;
import java.util.Collections;

import de.fh.dortmund.pk1.aufgabe1.exception.alleKartenVerteiltException;

/**
 * @author   marcs
 */
public class Karte {
	//setzte wichtige Attribute
	private static int dieKartenIndex = 17;
	private static boolean shuffle = false;
	//init des Arrays verd (Verdachtige)
	/**
	 * @uml.property  name="verd"
	 */
	private static String[] verd = { "Oberst von Gatow", "Frau Weiss",
			"Reverend Gruen", "Baronin von Porz", "Professor Bloom",
			"Fraeulein Gloria" };
	//init des Arrays raum (Tataum)
	/**
	 * @uml.property  name="raum"
	 */
	private static String[] raum = { "Kueche", "Musikzimmer", "Wintergarten",
			"Speisezimmer", "Billardzimmer", "Bibliothek", "Salon", "Halle",
			"Arbeitszimmer" };
	//init des Arrays waffe (Tatwaffe)
	/**
	 * @uml.property  name="waffe"
	 */
	private static String[] waffe = { "Dolch", "Seil", "Rohrzange",
			"Heizungsrohr", "Leuchter", "Pistole" };

	// new Array die Karten zum mischen hinterher
	private static String[] dieKarten = new String[18];

	public static String[] getVerd() {
		return verd;
	}

	public static String[] getRaum() {
		return raum;
	}

	/**
	 * Getter fuer Waffen.
	 * @return   Waffen werden zurueckgegeben.
	 * @uml.property  name="waffe"
	 */
	public static String[] getWaffe() {
		return waffe;
	}

	/**
	 * "Erstellt" Geheimakte.
	 * 
	 * @return Liefert die Geheimakte.
	 */
	//verteilt Geheimakte(erstellt sie)
	public static String[] verteileKartenSpielbrett() {

		//sortiert hier die Arrays
		sortiereArray(verd, Zufall.zufaelligeZahl(6) - 1);

		sortiereArray(raum, Zufall.zufaelligeZahl(9) - 1);

		sortiereArray(waffe, Zufall.zufaelligeZahl(6) - 1);

		// String[] geheimakte wird hier init
		String[] geheimakte = { verd[5], raum[8], waffe[5] };

		return geheimakte;
	}

	/**
	 * Verteilt die Karten an die Spieler
	 * 
	 * @return Liefert die "verteilte" Karte zurueck
	 * @throws Exception alleKartenVerteiltException wird geworfen, wenn versucht wird zu viele zu verteilen.
	 */
	//verteilt restliche Karten an Spieler bzw. Computer
	public static String verteileKartenSpieler() throws Exception {
		// testen ob alle Karten verteilt
		if (dieKartenIndex == -1)
			throw new alleKartenVerteiltException();

		//shuffle das Array vorher werden aber die 3 Kartenstapel (3 Arrays) zu einen Array gemacht, ohne Karten von Geheimakte
		if (shuffle == false) {

			for (int i = 0; i < 5; i++) {
				dieKarten[i] = verd[i];
			}

			for (int i = 5; i < 13; i++) {
				dieKarten[i] = raum[i - 5];
			}

			for (int i = 13; i < 18; i++) {
				dieKarten[i] = waffe[i - 13];
			}
			//Mischt Array durch
			Collections.shuffle(Arrays.asList(dieKarten));

			shuffle = true;
		}
		//setzt String verteileKArte ,also die Karte die ausgeteilt wird 
		String verteilteKarte = dieKarten[dieKartenIndex];
		//Index ein weniger, so das eine Karte weniger
		dieKartenIndex -= 1;

		return verteilteKarte;
	}

	/**
	 * sortiert ein uebergebens Array.
	 * 
	 * @param dasArray Uebergabe des zu sortierende Array.
	 * @param derIndex Wert, welcher nach "hinten" ins Array soll.
	 */
	//sortiert einübergebendes array (ein IndexElemt wird ans Ende des Arrays gesetzt)
	public static void sortiereArray(String[] dasArray, int derIndex) {

		String ansEnde = dasArray[derIndex];

		for (int i = derIndex; i < dasArray.length - 1; i++) {
			dasArray[i] = dasArray[i + 1];
		}
		dasArray[dasArray.length - 1] = ansEnde;
	}

}